/**
 * @file    button.h
 * @brief   Funçoes para criaçao e manipulacao de botoes. 
 *
 */

#ifdef	__cplusplus
extern "C" {
#endif

#define BUTTON_SUCCESS          0
#define BUTTON_FAILURE          -1
#define MAX_NUMBER_BUTTONS      50       //!< Numero maximo de botoes.
#define DEFAULT_BUTTON_BORDER   3        //!< Tamanho padrao da borda do botao.
#define PRESSED_OFFSET          0x40     // Color difference for pressed button.

    /**
     * @brief Cria um botao
     * @param unsigned int x             Coordenada x da posiçao do botao
     * @param unsigned int y             Coordenada y da posiçao do botao
     * @param unsigned int height        Altura do botao em pixels
     * @param unsigned int width         Largura do botao em pixels
     * @param unsigned int r             Definiçao da cor em RGB
     * @param unsigned int g             Definiçao da cor em RGB
     * @param unsigned int b             Definiçao da cor em RGB
     * @param unsigned char *text        Texto do botao
     * @param unsigned int font_height   Altura da fonte
     * @return int              Retorna o id da tela ou BUTTON_FAILURE.
     * @see button_setBorder
     */
    extern int button_create(unsigned int x, unsigned int y, unsigned int height,
            unsigned int width, unsigned int r, unsigned int g, unsigned int b,
            unsigned char *text, unsigned int font_height, unsigned int font_r,
            unsigned int font_g, unsigned int font_b);

    /**
     * @brief Desenha o botao no buffer da janela a ele associada
     * @param int buttonId      Id do botao
     * @return int              Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     *
     * @see screen_insertButton
     */
    extern int button_draw(int buttonId);

    /**
     * @brief Bloqueia o botao para que não possa ser selecionado.
     * @param int buttonId Id do botao
     * @return int Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     */
    extern int button_block(int buttonId);

    /**
     * @brief Desbloqueia o botao.
     * @param int buttonId Id do botao
     * @return int Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     */
    extern int button_unblock(int buttonId);

    /**
     * @brief Seleciona o botao.
     * @param int buttonId Id do botao
     * @return int Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     */
    extern int button_select(int buttonId);

    /**
     * @brief Deseleciona o botao.
     * @param int buttonId Id do botao
     * @return int BUTTON_SUCCES ou BUTTON_FAILURE
     */
    extern int button_unselect(int buttonId);

    /**
     * @brief Define a visibilidade do botao
     * @param int buttonId Id do botao
     * @param unsigned char visible Visibilidade do botao (true ou false)
     * @return int Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     */
    extern int button_setVisible(int buttonId, unsigned char visibility);

    /**
     * @brief Define o texto do botao
     * @param int buttonId Id do botao
     * @param unsigned char *text   Texto a ser definido
     * @return int Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     */
    extern int button_setText(int buttonId, unsigned char *text);

    /**
     * @brief Define a borda do botao.
     * @param int buttonId Id do botao
     * @param unsigned int border   Largura da borda em pixels
     * @return int Retorna BUTTON_SUCCESS ou BUTTON_FAILURE
     */
    extern int button_setBorder(int buttonId, unsigned int border);

    /**
     * @brief Define a cor do botao.
     * @param int buttonId  Id do botao.
     * @param unsigned int r         Cor do botao em RGB.
     * @param unsigned int g         Cor do botao em RGB.
     * @param unsigned int b         Cor do botao em RGB.
     * @return int          Retorna BUTTON_SUCCESS ou BUTTON_FAILURE.
     */
    extern int button_setColor(int buttonId, unsigned int r, unsigned int g, unsigned int b);

    /**
     * @brief Define a cor da fonte do botao.
     * @param int buttonId  Id do botao.
     * @param unsigned int r         Cor da fonte do botao em RGB.
     * @param unsigned int g         Cor da fonte do botao em RGB.
     * @param unsigned int b         Cor da fonte do botao em RGB.
     * @return int          Retorna BUTTON_SUCCESS ou BUTTON_FAILURE.
     */
    extern int button_setFontColor(int buttonId, unsigned int r, unsigned int g, unsigned int b);

    /**
     * @brief Testa se o botao está bloqueado
     * @param int buttonId  Id no botao
     * @return int Retorna 1 para botão bloqueado, 0 para botão desbloqueado
     *             Retorna BUTTON_FAILURE em caso de falha
     */
    extern int button_isBlocked(int buttonId);

    /**
     * @brief Testa se o botao está selecionado
     * @param int buttonId  Id no botao
     * @return int Retorna 1 para botão selecionado, 0 para botão não selecionado
     *             Retorna BUTTON_FAILURE em caso de falha
     */
    extern int button_isSelected(int buttonId);

    /**
     * @brief Testa se o botao está visível
     * @param int buttonId  Id no botao
     * @return int Retorna 1 para botão visível, 0 para botão invisível
     *             Retorna BUTTON_FAILURE em caso de falha
     */
    extern int button_isVisible(int buttonId);
    
	extern void button_setRedraw(signed int buttonId);

    extern signed int button_getX(signed int buttonId);

    extern signed int button_getY(signed int buttonId);

    extern signed int button_getWidth(signed int buttonId);

    extern signed int button_getHeight(signed int buttonId);

#ifdef	__cplusplus
}
#endif
